#ifndef _ANALYZER_H_
#define _ANALYZER_H_
#include <iostream>

template
<
    typename ... Criteria
>
struct Analyzer
{
};

template
<
    typename Criterion,
    typename ... Criteria
>
struct Analyzer<Criterion, Criteria ... >
{
    template<SignalSystem>
    void operator()(SignalSystem& sys)
    {
        Criterion criterion;
        cout << criterion.getName() << ": "<< criterion(sys) << " ";
        return Analyzer<Criteria ...>()(sys, report);
    }
};

template
<
>
struct Analyzer
{
    template<SignalSystem>
    void operator()(SignalSystem& sys)
    {
        cout << endl;
    }
};

#endif
